home *** CD-ROM | disk | FTP | other *** search
- //: C19:applySequence.h
- // From Thinking in C++, 2nd Edition
- // Available at http://www.BruceEckel.com
- // (c) Bruce Eckel 1999
- // Copyright notice in Copyright.txt
- // Apply a function to an STL sequence container
-
- // 0 arguments, any type of return value:
- template<class Seq, class T, class R>
- void apply(Seq& sq, R (T::*f)()) {
- typename Seq::iterator it = sq.begin();
- while(it != sq.end()) {
- ((*it)->*f)();
- it++;
- }
- }
-
- // 1 argument, any type of return value:
- template<class Seq, class T, class R, class A>
- void apply(Seq& sq, R(T::*f)(A), A a) {
- typename Seq::iterator it = sq.begin();
- while(it != sq.end()) {
- ((*it)->*f)(a);
- it++;
- }
- }
-
- // 2 arguments, any type of return value:
- template<class Seq, class T, class R,
- class A1, class A2>
- void apply(Seq& sq, R(T::*f)(A1, A2),
- A1 a1, A2 a2) {
- typename Seq::iterator it = sq.begin();
- while(it != sq.end()) {
- ((*it)->*f)(a1, a2);
- it++;
- }
- }
- // Etc., to handle maximum likely arguments ///:~
-